﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Caja.Core.Interfaces;
using Chilis.Caja.Data.Models;

namespace Chilis.Caja.Core
{
    public class ArqueoService : IArqueoService
    {
        public Chilis.Caja.Data.Models.Arqueo insertar(Chilis.Caja.Data.Models.Arqueo poArqueo)
        {
            ModelDataContext db = new ModelDataContext();

            Chilis.Caja.Data.Models.Arqueo oArqueo = new Chilis.Caja.Data.Models.Arqueo();

            int iIdArqueo = 1;

            var oMaxArqueo = (db.Arqueo.Max(x => x.IdArqueo));

            if (oMaxArqueo != null)
            {
                iIdArqueo = int.Parse(oMaxArqueo) + 1;
            }


            oArqueo.IdArqueo = iIdArqueo.ToString();
            oArqueo.IdCaja = poArqueo.IdCaja;
            oArqueo.IdTurno = poArqueo.IdTurno;
            oArqueo.IdCajero = poArqueo.IdCajero;
            oArqueo.FechaHoraArqueo = DateTime.Now;
            oArqueo.IdAdministrador = poArqueo.IdAdministrador;
            oArqueo.TipoCambio = poArqueo.TipoCambio;
            oArqueo.Total = 0;

            foreach (DetalleArqueo poDetalleArqueo in poArqueo.DetalleArqueo)
            {
                DetalleArqueo oDetalleArqueo = new DetalleArqueo();

                oDetalleArqueo.CodigoArqueo = poDetalleArqueo.CodigoArqueo;
                oDetalleArqueo.CodigoDenominacion = poDetalleArqueo.CodigoDenominacion;
                oDetalleArqueo.CantidadDenominacion = poDetalleArqueo.CantidadDenominacion;

                oArqueo.DetalleArqueo.Add(oDetalleArqueo);
            }

            db.Arqueo.InsertOnSubmit(oArqueo);

            db.SubmitChanges();

            return oArqueo;
        }

        public Chilis.Caja.Data.Models.Arqueo actualizar(Chilis.Caja.Data.Models.Arqueo poArqueo)
        {
            ModelDataContext db = new ModelDataContext();

            Chilis.Caja.Data.Models.Arqueo oArqueo = (from n in db.Arqueo
                                                      where n.IdArqueo.Equals(poArqueo.IdArqueo)
                                                      select n).First <Chilis.Caja.Data.Models.Arqueo>();
            
            //oArqueo.IdCaja = poArqueo.IdCaja;
            //oArqueo.IdTurno = poArqueo.IdTurno;
            //oArqueo.IdCajero = poArqueo.IdCajero;
            //oArqueo.FechaHoraArqueo = poArqueo.FechaHoraArqueo;
            //oArqueo.IdAdministrador = poArqueo.IdAdministrador;
            //oArqueo.TipoCambio = poArqueo.TipoCambio;
            oArqueo.Total = 0;

            foreach (DetalleArqueo poDetalleArqueo in oArqueo.DetalleArqueo)
            {
                db.DetalleArqueo.DeleteOnSubmit(poDetalleArqueo);
            }

            foreach (DetalleArqueo poDetalleArqueo in poArqueo.DetalleArqueo)
            {
                DetalleArqueo oDetalleArqueo = new DetalleArqueo();

                oDetalleArqueo.CodigoArqueo = poDetalleArqueo.CodigoArqueo;
                oDetalleArqueo.CodigoDenominacion = poDetalleArqueo.CodigoDenominacion;
                oDetalleArqueo.CantidadDenominacion = poDetalleArqueo.CantidadDenominacion;

                oArqueo.DetalleArqueo.Add(oDetalleArqueo);
            }

            db.SubmitChanges();

            return oArqueo;
        }
    }
}
